import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Gato here.
 * 
 * @author (Karen Gonzalez) 
 * @version (29/05/14)
 */
public class Gato extends Enemigos
{
    /**Variables de instancia de la clase Gato*/
    private int velocidad;
    private int izq;
    private int arriba;
    private int abajo;
    private int der;
    private int cont;
    private int inicio;
    private int aleatorio = 0;
    private int dir;
    private int contAtaque;
    private boolean existeGato;
    private Jugador jug;
    private int c;
    
    /**Constructor de la clase Gato, se inicializan las variables de instancia*/
    public Gato()
    {
        contAtaque=0;
        velocidad = 2;
        izq = 1;
        c=0;
        der = 2;
        arriba = 3;
        abajo = 4;
        cont = 0;
        inicio = 1;
        dir = 0;
        existeGato=true;
        getImage().scale(70,70);
    }
    
    /**Actua de la Clase gato, donde se mandan llamar los metodos para ejecutarse constantemente*/
    public void act() 
    {
        CatchWorld mundo = (CatchWorld)this.getWorld();
        jug = (Jugador)mundo.getJugador();
        move(2);
        mueveGato();
       
         if(jug.TocaMartillo()==true)
        {
            if(c >=10  )
            {
                ataca();
                contAtaque=0;
            }
            cont++;
        } 
        
        else
        if(contAtaque >=  20 && contAtaque>=100)
        {
        ataca();
        contAtaque=0;
         }        
        contAtaque++;
        
        if(getX()>=780||getY()>=580)
        {
         getWorld().removeObject(this);
         existeGato=false;
        }
        if(existeGato==false)
        {
            mundo.addObject(new Gato(),109,66);
        }
        existeGato=true;
    }    
    
    /**Metodo para definir los limites en X y Y del gato*/
    public boolean limitesGato()
    {
       if(getX()>=780||getY()>=580)
       {
        getWorld().removeObject(this);
        return false;
       }
       return true;        
    }
    
    /**Metodo para agregar rocas, y dirigirlas al jugador*/
    public void ataca()
    {
       getWorld().addObject(new Roca(),getX()+3,getY());
    }
        
    /**Metodo para que cuando el gato no toque la plataforma caiga */
    public void gravedad()
    {
        setLocation(getX(), getY()+velocidad);
    }
       
    /**Metodo donde se mueve el gato, se le da una direccion aleatoriamente*/
   public void mueveGato()
   {
       CatchWorld mundo = (CatchWorld)this.getWorld();
       Jugador jugador = (Jugador)mundo.getJugador();
       Actor plataforma = getOneIntersectingObject(Plataforma.class);
       
       if (cont == 100 || inicio == 1)
       {
         cont = 0;
         inicio = 0;
         aleatorio =Greenfoot.getRandomNumber(4);
       } 
           
        if(plataforma != null)
        { 
            if(aleatorio == izq)
              setLocation(getX()-2, getY());
            if(aleatorio == der)
               setLocation(getX()+2, getY());
            
        }
        else if(plataforma == null)
        {
             gravedad();
        }
        
        else if(getX()>=30 || getX()<= 700 || getY()>=37 || getY() <= 567 )
        {            
            if(aleatorio == izq)
            { 
              setLocation(getX()-3, getY());
            }
            else
            if(aleatorio == der)
            {
               setLocation(getX()+3, getY());
            }
            else
            if(aleatorio == arriba)
            { 
               setLocation(getX()-3, getY()+3);
            }
            else
            if(aleatorio == abajo)
            {
              setLocation(getX(), getY()-3);
            }
            cont++;             
        }
   }
}
                  